Any large software system is constructed from execution and configuration artifacts that are heterogeneous in their type. The types may include, for example, source code artifacts, configuration files, database schemas and instances, web pages (dynamic and static), connectors, message schemas, etc. A challenge in software engineering with this type of system is determining, using static analysis, how the system operates. Code flows often are driven by configurations that span multiple asset types, and, in most cases, they are not even determinable until execution.
As with any system, system configurations change (e.g., modifications to configuration files and/or database configuration tables) over time for a variety of reasons. To make changes, it is often necessary to know details about the structure of the system. To this end, reverse engineering is currently performed to extract the design artifacts from the existing code. However, this type of analysis is, to date, usually focused only on a single artifact type (e.g., source code written in a single programming language). This is problematic because enterprise systems are composed of a multitude of artifact types. Unfortunately, currently analysis of dependencies between artifact types (i.e., heterogeneous types) is done manually. This type of analysis is complex and, as such, is error prone.
In view of the foregoing, a need exists to overcome one or more of the deficiencies in the related art.